package asem.excepciones;

import alex.Token;
import asem.tablaSimbolos.tipo.Tipo;

public class ExcepcionTiposIncompatibles extends ExcepcionSemantica {

	public ExcepcionTiposIncompatibles(Tipo t1, Tipo t2, Token operador) {
		super(operador.getFila(), operador.getColumna(), crearMensaje(t1, t2,
				operador));
	}

	public ExcepcionTiposIncompatibles(Tipo t, Token operador) {
		super(operador.getFila(), operador.getColumna(), crearMensaje(t, null,
				operador));
	}

	public ExcepcionTiposIncompatibles(Token l, Tipo l2, Tipo t) {
		super(
				l.getFila(),
				l.getColumna(),
				String.format(
						"El tipo del lado derecho, %s, no se corresponde con el esperado, %s.",
						t.toString(), l2));
	}

	private static String crearMensaje(Tipo t1, Tipo t2, Token op) {
		String msj;

		if (t2 == null)
			msj = String
					.format("El tipo %s no es el esperado para utilizar el operador %s. \n",
							t1.toString(), op.getLexema());

		msj = String
				.format("Los tipos %s y %s no son los esperados para utilizar el operador %s. \n",
						t1.toString(), t2.toString(), op.getLexema());

		return msj;
	}

}
